import axios from 'axios'
// import {get} from 'core-js/core/dict'
import Vue from 'vue'
import {errorAlert} from '../utils/alert'
import store from '../store'
import router from "../router"


//1. 配置环境
// 开发环境
if (process.env.NODE_ENV === 'development') {
    Vue.prototype.$pre = "http://localhost:2000"
} else {
    // 生产环境
    Vue.prototype.$pre = ""
}

// 2.请求拦截 
axios.interceptors.request.use(config => {
    //请求逻辑
    //如果访问的地址不是登录，就要写token
    if (config.url != '/api/userlogin') {
        config.headers.authorization = store.getters.userInfo.token;
    }

    return config

})

// 3.响应拦截
axios.interceptors.response.use(res => {
    // ①打印
    console.group("本次请求地址：" + res.config.url)
    console.log(res)
    console.groupEnd()

    //失败处理
    if(res.data.code!=200){
        errorAlert(res.data.msg)
    }

     // 处理掉线
     if (res.data.msg == '登录已过期或访问权限受限') {
        //清除vuex和本地存储
        store.dispatch("changeUserInfo", {})
        // 跳转到登录
        router.push("/login")
    }

    // 响应逻辑

    return res
})


/**
 * 
 * @param {*} url 请求地址
 * @param {*} params 请求参数
 * @param {*} haveFile 判断是否包含文件，包含传true,默认是false
 * @returns axios
 * eg:export const requupload = (p) =>  post("/upload",p)
 */
 export const post=(url,params,haveFile=false)=>{
    let d=null
    if(haveFile){
        //有文件
        d=new FormData()
        for(let k in params){
            d.append(k,params[k])
        }
    }else{
        //无文件
        d=params
    }
    return axios({
        url,
        method:"post",
        data:d
    })
}
/**
 * 
 * @param {*} url 请求地址
 * @param {*} params 请求参数,默认参数{}
 * @returns axios()
 * eg: export const reqlist = p => get("/list", p)
 */
export const get = (url, params = {}) => {
    return axios({
        url,
        method: "get",
        params
    })
}
